home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1992 June: ROMin Holiday / ADC Developer CD (1992-06) (''ROMin Holiday'')_iso / Developer Connection - 06-1992.iso / Development Platforms / Apple II / Essentials / Technical.Notes / AIIe / TN.AIIE.002 < prev    next >
Encoding:
Text File  |  1989-04-22  |  24.7 KB  |  463 lines  |  [TEXT/pdos]

  1. Apple II
  2. Technical Notes
  3. _____________________________________________________________________________
  4.                                                   Developer Technical Support
  5.  
  6.  
  7. Apple IIe
  8. #2:    Hardware Protocol for Doing DMA
  9.  
  10. Revised by:    Glenn A. Baxter & Rob Moore                      November 1988
  11. Written by:    Peter Baum                                        January 1983
  12.  
  13. This Technical Note explains the hardware protocol for doing direct memory 
  14. access (DMA) on the Apple IIe and Apple ][ and is meant as a guideline for 
  15. developing peripherals which do DMA on these machines, not as a specification 
  16. for future Apple products or revisions.
  17. _____________________________________________________________________________
  18.  
  19. This Note covers the timing differences between the Apple ][ and IIe and also 
  20. gives tips on how to design a peripheral card that will work in both systems.  
  21. The reader should be very familiar with either the Apple ][+ or the Apple IIe, 
  22. especially the timing on the data and address buses in relation to the 6502.
  23.  
  24. DMA is used by peripheral cards in the Apple II family to transfer data 
  25. directly into memory without benefit of the processor.  Transfer of data from 
  26. a peripheral device into RAM can normally be handled one byte at a time under 
  27. control of the processor.  By using DMA, you can achieve greater data transfer 
  28. rates than the 6502 can handle in software.  This transfer rate can approach 
  29. the full-cycle time of the memory.  This technique can also be used to 
  30. transfer single data bytes into memory without requiring the CPU to process an 
  31. interrupt, which can be very time consuming.
  32.  
  33. The DMA process entails five steps:  turn the processor off, gain access to 
  34. the R/W* line and both address and data buses, complete the data transfer, 
  35. release the data and address buses, and finally, allow the microprocessor to 
  36. restart.  This Note covers each of these steps in detail.
  37.  
  38. At this point, I should caution the prospective developer that DMA on an Apple 
  39. ][+ or Apple IIe can only be done under certain circumstances.  Because DMA 
  40. turns off the processor, any program with a software timing loop will not work 
  41. properly.  These programs assume that each instruction will take a fixed 
  42. amount of time, which is not true when the processor stops in the middle of an 
  43. instruction.  This assumption means that the Apple II disk drives will not 
  44. work since they require a timing loop to read a disk.  (Co-processor cards 
  45. work with DMA because they initiate the disk access and know that DMA cannot 
  46. be used until the disk is finished).
  47.  
  48. Another problem is that because of the mapping scheme used on the Apple IIe 
  49. extended 80-column (64K) card, a peripheral card cannot tell which memory bank 
  50. is being used without a complicated detection scheme.  This problem means that 
  51. if a DMA device writes to a certain memory space, it might not be able to read 
  52. the same data back.
  53.  
  54.  _______                   INTERNAL DATA BUS (MD 0-7)
  55. |       |<---------+-----+-----------+---------+------------+---------+
  56. |       |          ^     ^           ^         ^            |         |
  57. |       |          |  ___|______     |         |       _____v______   |
  58. |       |          | | Keyboard |  __v__   ____v____  | DATA LATCH |  |
  59. |       |          | |__________| | 64K | | 80 COL. | |____________|  |
  60. |       |       ___|___      ^    | RAM | | AUX RAM |          |      |
  61. |       |      | EO-FF |     |KDB |_____| |_________|--------->+      |
  62. | 6502A |      |  ROM  |     |         ^          ^  VIDEO DATA|      |
  63. |       |      |_______|     |         |          |            |      |
  64. |       |        ^    ^      |      +--+----------+-----+      |   ___v_____
  65. |       |        |    |ROMEN |      |RAM ADDR BUS (0-7) |      |  |  DATA   |
  66. |       |        |   _|______|______|__                 |      |  |  LATCH  |
  67. |       |        |  |      MMU         |------------------------->| 74LS245 |
  68. |       |        |->|__________________|  MD IN/OUT     |      |  |_________|
  69. |       |        |       ^                              |      |      ^
  70. |       |        |       |                            __|__    |      |
  71. |       |        |       |                           | IOU |   |      |
  72. |       |        +---------------------------------->|_____|<--+      |
  73. |       |        |       |                            ^   |    |      |
  74. |       |        |       |TIMING AND CONTROL SIGNALS  |   |    |      |
  75. |       |<---------------+----------------------------+   |    |      |
  76. |       |        |       |                              __v____v__    |
  77. |       |   ___  |       +--------------+              |  VIDEO   |   |
  78. |       |  | 7 | |       |              |              | CIRCUITS |   |
  79. |       |  | 4 | |   ____|_____    _____v______        |__________|   |
  80. |       |  | L | |  |  TIMING  |  | PERIPHERAL |                      |
  81. |       |  | S | |  | CIRCUITS |  |   SLOTS    |<---------------------+
  82. |       |  | 2 | |  |__________|  |____________|   EXTERNAL DATA BUS
  83. |       |  | 4 | |                      ^ 
  84. |       |  | 4 | |ADDRESS BUS (A0-A15)  | 
  85. |_______|->|___|-+----------------------+
  86.  
  87.                 Figure 1 - Apple IIe Functional Block Diagram
  88.  
  89. Though the differences between the Apple IIe and Apple ][+ architecture appear 
  90. to be significant to a device which uses DMA, this should not affect the 
  91. design in most cases.  A good rule of thumb is that if a device is designed to 
  92. work on the Apple IIe, then it will be backward compatible and also run on the 
  93. Apple ][+.  The converse is not true; cards that use DMA on the Apple ][+ 
  94. might not work on the Apple IIe, hence, most of the descriptions in this Note 
  95. refer to the Apple IIe with occasional references to the Apple ][+.  For 
  96. example, the timing specifications listed are calculated from the Apple IIe 
  97. timing paths unless otherwise noted.
  98.  
  99. Occasionally the descriptions refer to a chip on the motherboard of the Apple 
  100. IIe, so a set of Apple IIe schematics should be nearby.  The corresponding 
  101. parts on the Apple ][+ will be specified when applicable.
  102.  
  103. The following paragraphs describe and define some of the terms that are used 
  104. throughout this Note.  The Apple IIe block diagram on the previous page may be 
  105. helpful when reading about the buses.
  106.  
  107. 01 (phase one) time    The time when the 01 system timing signal is high.  
  108.                        During this time the data bus, address bus, and RAM are
  109.                        used for video refreshing.  This time is also called the
  110.                        video cycle or video phase.
  111. 0o (phase zero) time   The time when 0o clock is high.  0o is the inverse of 
  112.                        01.  During this time the microprocessor uses the data
  113.                        and address buses.  This time is also known as the CPU
  114.                        cycle or CPU phase.
  115. IOU and MMU            Two MOS custom chips inside the Apple IIe.  See chapter
  116.                        7 of the Apple IIe Technical Reference Manual for more
  117.                        details on the custom chips.
  118. Data bus               The microprocessor, ROM, and RAM are connected to this
  119.                        bus.  On the IIe this bus generally has MOS components
  120.                        connected to it rather than TTL and is sometimes called
  121.                        the MOS data bus.  A 74LS245 bidirectional bus
  122.                        transceiver (location B2 on the original motherboard)
  123.                        connects this internal bus to an external bus that the
  124.                        outside world sees through the peripheral slots.  The
  125.                        data bus connected to the peripheral slots is called the
  126.                        external data bus.  The Apple ][ does not have these two
  127.                        data buses.  Instead, the peripheral slots are connected
  128.                        to the ROM, CPU data buffers, and RAM data inputs.  The
  129.                        RAM data outputs are multiplexed with the keyboard data
  130.                        onto this bus.
  131. Address bus            There are three different sections to the address bus on
  132.                        the Apple IIe.  The first section consists of the
  133.                        addresses from the 6502A into a pair of 74LS244s
  134.                        (locations B1,B3).  Part two connects the other side of
  135.                        the '244 to the address bus that the peripheral slots
  136.                        see.  Also connected on this bus are the MMU, the ROM,
  137.                        and the chips that decode I/O SELECT, DEVICE SELECT, and
  138.                        I/O STROBE.  The third address bus is generated by the
  139.                        custom chips and is only used to access the RAM.  The
  140.                        MMU and IOU automatically multiplex this bus with the
  141.                        high byte and low byte of an address during any RAM 
  142.                        access, whether it be for video refresh or for a 
  143.                        microprocessor instruction fetch.  This third bus is
  144.                        called the RAM address bus.  The Apple ][ also has these
  145.                        three buses, but uses 8T97s and discrete logic instead
  146.                        of the 74LS244 and custom chips.
  147. 6502 microprocessor    In the Apple IIe a 6502A, a 2 MHz part is used instead 
  148.                        of the 1 MHz 6502 used in the Apple ][+.  Since the
  149.                        custom chips in the Apple IIe are MOS and slower than
  150.                        the TTL in the Apple ][+, the faster 6502A was used to
  151.                        guarantee better margins.  For example, the 6502A sets
  152.                        up the address bus faster on the Apple IIe than the 6502
  153.                        does in the Apple ][+.
  154.  
  155. On the IIe, all the timing signals are generated by the PAL timing chip, 
  156. except for the 7 M signal which is generated from an 74S109 or 74109 (early 
  157. versions of the IIe).  Although both the PAL and the 74S019 use the 14 M 
  158. signal for a clock, there will be some skew between edges of the 7 M clock and 
  159. the timing signals from the PAL, such as the edges of 0o or 01.  This skew 
  160. means the 7 M clock edge may rise as much as 20 ns before, or 5 ns after, the 
  161. 0o falling edge.  The clock signals of the Apple ][+ should be tighter than 
  162. this (probably within 5 ns of each other) since 7 M, 0o, and 01 are all 
  163. generated from the same chip, a 74S175.  Take this skew into account whenever 
  164. using the 7 M signal in a design.
  165.  
  166.  
  167. Getting on the Bus (Exact Change Only)
  168.  
  169. 1.    Pull DMA low during 01 time.
  170.  
  171.       On the Apple IIe, the DMA line controls the direction of the 
  172.       74LS245, which enables the internal data bus outwards to the 
  173.       peripheral slots or enables external data onto the internal bus.  
  174.       Changing the state of the DMA line during 0o could cause the '245 
  175.       to change directions, forcing the internal data bus to go tri-
  176.       state during a microprocessor read.  The 6502 would read garbage 
  177.       and the computer might go belly up by jumping to a random memory 
  178.       location.
  179.  
  180.       On the Apple ][, pulling the DMA line always forces the CPU data 
  181.       bus buffer to point inward and drive toward the 6502.  Pulling the 
  182.       DMA line low during 0o of a write cycle would result in garbage 
  183.       being written to memory, since the data bus to the RAM would 
  184.       suddenly go tri-state.
  185.  
  186. 2.    Wait 30 ns, then assert address bus and R/W* line.
  187.  
  188.       Before driving the address bus and R/W* line, the system must 
  189.       process the transition on the DMA line and release the bus.  This 
  190.       requires:
  191.  
  192.         25 ns    'LS244 output disable from low level
  193.         +5 ns    'S02 low to high level output transition
  194.         30 ns    delay from DMA negative edge before driving address 
  195.                  bus
  196.  
  197.     The 30 ns wait will also work on the Apple ][, since it only needs 
  198.     27 ns ('LS04 and 8T97).
  199.  
  200.                         ________________________________
  201.     Ph1         _______|
  202.                        |<----------------------->|
  203.                                213 ns (#3)
  204.                 ___________________  ___________  ______
  205.     Address Bus    High Impedence  \/           \/ Valid
  206.     from slots  ___________________/\___________/\______
  207.     
  208.                       ->|30 ns (#2)|<-
  209.     DMA         ________
  210.                         |_______________________________
  211.  
  212.                        Figure 2 - Getting On The Bus
  213.  
  214. 3.    Address and R/W* line must be valid within 213 ns of 01 positive 
  215.       edge.
  216.  
  217.       This constraint is needed to meet the setup requirements of the 
  218.       IOU, MMU, and RAM.  This time can be derived from the 6502A (2 
  219.       MHz) setup requirements.  The Apple ][ can wait for 300 ns before 
  220.       data must be valid, because it uses the 1 MHz 6502 which has a 
  221.       longer setup time.
  222.  
  223. Warning:    This specification (the address setup time) is the major 
  224. cause of failure for cards which use DMA in the Apple IIe.  
  225. Many DMA cards which were originally designed for the Apple 
  226. ][+ do not meet this specification.
  227.  
  228.  
  229. During DMA (Keep Your Hands Inside the Bus at all Times)
  230.  
  231. 1.    Don't drive the data bus during 01 time.
  232.  
  233.       On an Apple ][+, it is safe to drive the data bus 35 ns after 
  234.       asserting the R/W* line low, regardless of the point in the timing 
  235.       cycle.  When the R/W* line goes low, the 74LS257s at locations B6 
  236.       and B7 tri-state the data bus, even in the middle of 0o or 01.  
  237.       This action prevents a bus fight from occurring between a DMA 
  238.       device and the system.
  239.  
  240.       At first glance of the Apple IIe logic schematics, it appears that 
  241.       a bus fight cannot occur on the data bus.  During the 01 half of a 
  242.       write cycle, the 74LS245 tri-states the data bus within 30 ns of 
  243.       the R/W* line being pulled low.  While this does preclude a fight 
  244.       from occurring on the data bus during 01, it doesn't prevent a bus 
  245.       crash from occurring at the beginning of 0o.  At the beginning of 
  246.       0o, the 74LS245 is enabled and will drive the external data bus.  
  247.       If the peripheral card also drives the data bus, there could be a 
  248.       horrendous bus fight, since the 74LS245 can source 15 ma and sink 
  249.       24 ma per line.  This might cause a spike on the ground plane, 
  250.       which could cause a processor to reset on a co-processor card.
  251.  
  252.       Let us take a look at the problem by stepping thru Figure 3, a 
  253.       timing diagram.
  254.  
  255.       The diagram starts with the video cycle of a read operation.  
  256.       During the video cycle, the video refresh data is read from the 
  257.       RAM and put on the data bus.  This video data will appear on the 
  258.       peripheral slot (external) data bus because the 74LS245, as can be 
  259.       seen from Table 1, drives outward during 01 of a read cycle.
  260.  
  261.       Typically, the address bus and R/W* line would be setup by the 
  262.       6502A during 01 for the next CPU cycle, but instead, a peripheral 
  263.       card pulls the DMA line low.  As explained earlier, the peripheral 
  264.       device should wait at least 30 ns before driving the address bus 
  265.       and R/W* line.  In this first DMA cycle, the peripheral card wants 
  266.       to read a byte from RAM, so it keeps the R/W* line high.
  267.  
  268.       At this point we must switch over and use the Apple ][+ to explain 
  269.       the timing required to read the data from RAM.  The rule of thumb, 
  270.       that designing a DMA card for the Apple IIe will be backward 
  271.       compatible and run on the Apple ][+, will not hold here.  On the 
  272.       Apple ][+ data is valid on the peripheral connector a minimum of 
  273.       468 ns from the 0o rising edge and holds to at least the falling 
  274.       edge of 0o at 490 ns.  The hold time is actually the minimum 
  275.       propagation delay from the falling edge of 0o thru the following 
  276.       chips:  74LS257 at J1, 74LS139 at F2, 74LS20 at D2, 74LS00 at A2, 
  277.       and finally to the enable of the 74LS257s at B5 and B6.  On the 
  278.       Apple IIe a byte from RAM becomes valid at most 345 ns after the 
  279.       rising edge of 0o and stays valid until the 0o falling edge.
  280.                                                                     
  281. 7M
  282. _   _   _   _   _   _   _   _   _   _   _   _   _   _   _   _   _   _   _   _
  283.  |_| |_| |_| |_| |_| |_| |_| |_| |_| |_| |_| |_| |_| |_| |_| |_| |_| |_| |_| 
  284.  
  285. PH0
  286. ___               _____________               _____________               ____
  287.    |_____________|             |_____________|             |_____________|
  288.  
  289. PH1
  290.     _____________               _____________               _____________
  291. ___|             |_____________|             |_____________|             |____
  292.  
  293. R/W                          ->||<-(40-213 ns)
  294. ________________________________                              ________________
  295.                                 |____________________________|
  296.                             (5 ns Max)   (5 ns Max)    (5 ns Max)
  297. OE 74LS245                    ->||<-       ->||<-        ->||<-
  298.                                   ____________               _
  299. _________________________________|            |_____________| |_______________
  300.                                                          (5 ns Max)
  301. /DMA                                                       ->||<-
  302. ___
  303.    |__________________________________________________________________________
  304.  
  305. MD IN/OUT                                   ->|  |<-(130 ns Max)
  306.                                                   ____________
  307. _________________________________________________|            |_______________
  308.  
  309. DATA           ->|          |<-(468 ns*)   ->|   |<-(170 ns Max)
  310.                             ____             __  ____
  311. ___________________________/    \___________/  \/    \________________________
  312.                            \____/           \__/\____/
  313.                             valid                valid
  314.   ->||<-(30 ns Min)
  315. ADDR_  _____________________________  _____________________________  _________
  316. ___/ \/          valid              \/          valid              \/    valid
  317.    \_/\_____________________________/\_____________________________/\_________
  318.  
  319.  ->|  |<-(40-213 ns)                       * This is an Apple ][+ specification
  320.  
  321.                            Figure 3 - Timing Diagram
  322.  
  323.       In the second DMA cycle, the timing diagram shows the peripheral 
  324.       card writing a byte to memory.  In the first phase of the cycle, 
  325.       the video phase, the address bus and R/W* line are setup by the 
  326.       peripheral card within the timing specifications described 
  327.       earlier, 213 ns.  Though the direction of the 74LS245 still points 
  328.       toward the slots, the '245 is disabled when the R/W* line is 
  329.       pulled low by the peripheral device (see Table 1).  This will tri-
  330.       state the external data bus.  All the signals stay unchanged 
  331.       through the rest of the video phase, until the CPU cycle starts 
  332.       with the rising edge of 0o.
  333.  
  334.       Most bus fights occur at the beginning of the CPU cycle.  The CPU 
  335.       cycle begins with address bus and R/W* line setup already and the 
  336.       data bus tri-stated.  The signal MD IN/OUT, which drives the 
  337.       74LS245 direction control, is generated by the MMU and is always 
  338.       low during 01, so the 74LS245 drives toward the slots.  MD IN/OUT 
  339.       uses the 0o rising edge to clock itself high during a DMA write 
  340.       cycle, but because the MMU is a MOS chip the delay before MD 
  341.       IN/OUT finally rises can be as long as 130 ns from the 0o rising 
  342.       edge.  Hence, at the beginning of 0o the 74LS245 is in tri-state 
  343.       mode, but with the direction set to drive toward the peripheral 
  344.       slots.
  345.  
  346.           PHO    R/W                    Stable State of 74LS245
  347.            1      0    (Write to RAM)   High impedance
  348.            1      1    (Read from RAM)  Outward driving external data
  349.                                         bus (slots)
  350.            0      0    (Write to RAM)   Inward driving into RAM
  351.            0      1    (Read from RAM)  Outward driving external data
  352.                                         bus (slots)
  353.  
  354.                       Table 1-Stable State of 74LS245
  355.  
  356.       Within 5 ns after 0o goes high, the chip enable to the 74LS245 
  357.       goes low, enabling data onto the external data bus.  The 74LS245 
  358.       specification guarantees that the data will be valid within 40 ns 
  359.       from the chip enable.  If the peripheral device was also driving 
  360.       the bus, there would be a bus crash.  To prevent this bus crash, 
  361.       the data bus cannot be driven during 01, unless the data is pulled 
  362.       off the bus before 0o goes high.  This means that the rising edge 
  363.       of 0o cannot be used to gate data on and off the bus.  The bus 
  364.       fight will occur before the peripheral card can tri-state the data 
  365.       bus.
  366.  
  367.       Data can only be enabled onto the bus after the 74LS245 has 
  368.       changed directions and is driving the internal data bus.  The DMA 
  369.       device must allow 130 ns for the MD IN/OUT line to change, plus 
  370.       the delay for the 74LS245 to change directions which takes 25 ns, 
  371.       for a total of 155 ns.
  372.  
  373.       After this 155 ns, the data must be valid on the bus within 55 ns, 
  374.       because the RAM requires data be setup at the CAS falling edge, 
  375.       which occurs 210 ns into 0o.  This does not leave any time to 
  376.       spare, since, for example, a 74LS245 has a 40 ns enable time.  
  377.       This timing criteria will also work for the Apple ][+ since the 
  378.       setup time for 16K RAM is the same as the 64K RAM, and CAS also 
  379.       falls at 210 ns.  The data hold time of 55 ns after CAS falls is 
  380.       also the same for both the Apple IIe and the Apple ][+.
  381.  
  382.       Here is a scenario for a DMA write.  Set up the address bus and 
  383.       R/W* line within the required 213 ns, then wait for the first 7 M 
  384.       (pin 36 on slot) falling edge after 0o goes high before enabling 
  385.       your buffer onto the data bus.  This edge will occur at 140 ns 
  386.       into 0o, and when the gate delay is added, should guarantee the 
  387.       buffer will not be driving the bus in the first 155 ns.  I don't 
  388.       advocate depending on a minimum gate delay as standard design 
  389.       practice (my college professor thinks public whipping would be a 
  390.       justifiable punishment) but this is the real world (I'm not 
  391.       getting graded anyway).  The data bus is valid by the time CAS 
  392.       falls, and should be stable for at least another 55 ns or until 0o 
  393.       falls.
  394.  
  395. 2.    The processor can be held off for a total of 10 microseconds.
  396.       (10 0o clock cycles).
  397.  
  398.       This is true if a Rockwell 6502 is being used.  (A Synertek part 
  399.       can be held off for as long as 40 µsec.)  This time is the maximum 
  400.       cycle time of the 6502 and if there are no clock transitions 
  401.       within this time, it could result in internal registers (A,X,Y) 
  402.       losing data.  This maximum time varies from manufacturer to 
  403.       manufacturer of the 6502.
  404.  
  405. 3.    MMU and IOU multiplex address bus
  406.  
  407.       The custom chips automatically handle the multiplexing required of 
  408.       the RAM address bus.  The external device doing DMA must set up 
  409.       the address bus and R/W* line within 213 ns of the rising edge of 
  410.       01 just like the 6502A does.  The custom chips will automatically 
  411.       generate the addresses to the RAM for the video refresh cycle 
  412.       during 01, but use the addresses from the address bus to set up 
  413.       for the next instruction cycle.  Hence, the only consideration on 
  414.       the address bus during DMA is to meet the 213 ns setup time 
  415.       requirement.
  416.  
  417.       The 213 ns setup time will also work with the Apple ][ since it 
  418.       can take as long as 300 ns to set up the address bus and R/W* 
  419.       line.
  420.  
  421.  
  422. Getting Off the Bus
  423.  
  424. 1.    Don't release DMA during 0o.
  425.  
  426.       This is analogous to step 1 of Getting on the Bus.  If the DMA 
  427.       line is released during 0o the microprocessor will try to execute 
  428.       a cycle during this time without the data or address bus set up 
  429.       properly.  This random instruction fetch will probably cause the 
  430.       system to crash.
  431.  
  432. 2.    Tri-state address bus drivers on peripheral slots
  433.  
  434.       The DMA line is holding off the addresses from the 6502 onto the 
  435.       internal address bus by tri-stating the two 74LS244s on the Apple 
  436.       IIe bus and the 8T97s on the Apple ][+ bus.  The address bus and 
  437.       R/W* line from the external device in the peripheral slots should 
  438.       be tri-stated before releasing the DMA line or a bus fight will 
  439.       occur between the internal bus buffers and the peripheral slot 
  440.       drivers.
  441.  
  442. 3.    Release DMA line
  443.  
  444.       These last two steps are the opposite of the first two steps 
  445.       required to get on the bus.  Both of these steps, releasing the 
  446.       address and R/W* lines then the DMA line, should be done within 
  447.       178 ns of 01 going high.  This allows time for the 6502A to set up 
  448.       the address and R/W* lines properly for the next instruction 
  449.       cycle.
  450.  
  451.         213 ns    address set up requirements
  452.           5 ns    'S02 output high-to-low transition
  453.         -30 ns    'LS244 out enable time
  454.         178 ns    to release DMA line and allow 6502 to set up address bus
  455.  
  456.     Again, the Apple ][ can take longer, up to 260 ns, before 
  457.     releasing the DMA line.
  458.  
  459.  
  460. Further Reference
  461.     o    Apple IIe Technical Reference Manual
  462.  
  463.